package com.boot.study.jianfan;

import cn.hutool.core.util.NumberUtil;
import org.dromara.pdf.fop.doc.XEasyPdfTemplateDocument;
import org.dromara.pdf.fop.doc.bookmark.XEasyPdfTemplateBookmark;
import org.dromara.pdf.fop.doc.component.block.XEasyPdfTemplateBlockContainer;
import org.dromara.pdf.fop.doc.component.page.XEasyPdfTemplateCurrentPageNumber;
import org.dromara.pdf.fop.doc.component.page.XEasyPdfTemplateTotalPageNumber;
import org.dromara.pdf.fop.doc.component.table.XEasyPdfTemplateTable;
import org.dromara.pdf.fop.doc.component.table.XEasyPdfTemplateTableBody;
import org.dromara.pdf.fop.doc.component.table.XEasyPdfTemplateTableRow;
import org.dromara.pdf.fop.doc.component.text.XEasyPdfTemplateText;
import org.dromara.pdf.fop.doc.page.XEasyPdfTemplatePage;
import org.dromara.pdf.fop.handler.XEasyPdfTemplateHandler;
import org.dromara.pdf.pdfbox.doc.XEasyPdfPositionStyle;
import org.dromara.pdf.pdfbox.handler.XEasyPdfHandler;

import java.util.Date;

import static javafx.scene.paint.Color.DARKSEAGREEN;
import static org.apache.poi.sl.draw.binding.STPresetColorVal.DK_SEA_GREEN;
import static org.apache.poi.sl.draw.binding.STPresetColorVal.SILVER;

public class PdfTest2 {

    public static void main(String[] args) {
        // 定义输出路径
        String outputPath = "D:\\pdf\\test\\" + new Date().getTime() + ".pdf";
        // 创建文档
        XEasyPdfTemplateDocument document = XEasyPdfTemplateHandler.Document.build();


        XEasyPdfTemplatePage cover = XEasyPdfTemplateHandler.Page.build()
                .setId("1")
                .setMarginTop("70pt")
                .setMarginLeft("20pt")
                .setMarginRight("20pt");
        cover.setBodyBackgroundHorizontalPosition("center");
       // cover.setBodyWatermark(XEasyPdfTemplateHandler.Watermark.build()
                      //  .setText("TACE联合卡瑞利珠单抗和甲磺酸阿帕替尼对比")
                       // .setId("watermark")

//                        .setWidth("200pt")
//                        // 设置水印图像高度
//                        .setHeight("150pt")
//                        // 设置水印显示宽度
//                        .setShowWidth("50pt")
//                        // 设置文字大小
//                        .setFontSize("5pt")
                        // 设置文字颜色
                       // .setFontColor("gray")
                        // 设置文字透明度
                       // .setFontAlpha("100")
                        // 设置逆时针旋转
                       // .setRadians("-45")
                // 开启文件覆盖
                //.enableOverwrite()
       // );
        cover.addBodyComponent(
                XEasyPdfTemplateHandler.Text.build()
                        .setText("TACE联合卡瑞利珠单抗和甲磺酸阿帕替尼对比" +
                                "TACE治疗中晚期肝癌的随机对照开放多中心临床研究")
                        .setFontSize("28pt")
//                        .setFontWeight(XEasyPdfHandler.Font.BOLD.name())
                        .setFontWeight("bold")
                        .setHorizontalStyle(XEasyPdfPositionStyle.CENTER.name())
                        .setFontFamily("宋体")
                        .setMarginBottom("20pt"),
                XEasyPdfTemplateHandler.Text.build()
                        .setText("空白病例报告表(单一册)")
                        .setFontSize("26pt")
                        .setHorizontalStyle(XEasyPdfPositionStyle.CENTER.toString())
                        .setFontFamily("宋体")
                        .setMarginBottom("10pt"),
                XEasyPdfTemplateHandler.Text.build()
                        .setText("Unique Case Report Form")
                        .setFontWeight(XEasyPdfHandler.Font.BOLD.name())
                        .setFontSize("18pt")
                        .setHorizontalStyle(XEasyPdfPositionStyle.CENTER.name())
                        .setFontFamily("Times New Roman")
                        .setMarginBottom("60pt"),
                XEasyPdfTemplateHandler.Text.build()
                        .setText("方案版本号:${schemeVersion!\"\"}")
                        .setFontSize("10pt")
                        .setHorizontalStyle("center")
                        .setFontFamily("宋体")
                        .setMarginBottom("6pt"),
                XEasyPdfTemplateHandler.Text.build()
                        .setText("方案版本日期:2022-01-12")
                        .setFontSize("10pt")
                        .setHorizontalStyle("center")
                        .setFontFamily("宋体")
                        .setMarginBottom("6pt"),
                XEasyPdfTemplateHandler.Text.build()
                        .setText("eCRF版本号:${ecrfVersion!\"\"}")
                        .setFontSize("10pt")
                        .setHorizontalStyle("center")
                        .setFontFamily("宋体")
                        .setMarginBottom("6pt"),
                XEasyPdfTemplateHandler.Text.build()
                        .setText("eCRF版本日期:${ecrfVersionDate!\"\"}")
                        .setFontSize("10pt")
                        .setHorizontalStyle("center")
                        .setFontFamily("宋体")
                        .setMarginBottom("6pt"),


                XEasyPdfTemplateHandler.Table.build()
//                        .setVerticalStyle(XEasyPdfPositionStyle.CENTER.name())
                        .setHorizontalStyle(XEasyPdfPositionStyle.CENTER.name())
//                        .setMarginLeft("126pt")
                        .setFontFamily("宋体")
                        .setBody(XEasyPdfTemplateHandler.Table.Body.build().addRow(
                                XEasyPdfTemplateHandler.Table.Row.build()
                                        .addCell(
                                                XEasyPdfTemplateHandler.Table.Cell.build()
                                                        .setWidth("150pt")
//                                                        .setHorizontalStyle(XEasyPdfPositionStyle.RIGHT.name())
                                                        .setBorder("1 solid black")
                                                        .addComponent(XEasyPdfTemplateHandler.Text.build().setText("研究代码")),
                                                XEasyPdfTemplateHandler.Table.Cell.build()
                                                        .setWidth("150pt")
//                                                        .setHorizontalStyle(XEasyPdfPositionStyle.RIGHT.name())
                                                        .setBorder("1 solid black")
                                                        .addComponent(XEasyPdfTemplateHandler.Text.build().setText("projectCode")))
                                ,

                                XEasyPdfTemplateHandler.Table.Row.build().addCell(
                                        XEasyPdfTemplateHandler.Table.Cell.build()
                                                .setWidth("150pt")
                                                .setBackgroundColor(SILVER.toString())
                                                .setHeight("100pt")
                                                .setHorizontalStyle(XEasyPdfPositionStyle.LEFT.name())
                                                .setBorder("1 solid black")
                                                .addComponent(XEasyPdfTemplateHandler.Text.build().setText("临床试验组长单位")),
                                        XEasyPdfTemplateHandler.Table.Cell.build()
                                                .setWidth("150pt")
                                                .setBackgroundColor(DK_SEA_GREEN.toString())
                                                .setHeight("100pt")
                                                .setBorder("1 solid black")
                                                .addComponent(XEasyPdfTemplateHandler.Text.build().setText("sponsor")))
                                ,

                                XEasyPdfTemplateHandler.Table.Row.build().addCell(
                                        XEasyPdfTemplateHandler.Table.Cell.build()
                                                .setWidth("150pt")
                                                .setHorizontalStyle("end")
                                                .setBorder("1 solid black")
                                                .addComponent(XEasyPdfTemplateHandler.Text.build().setText("主要研究者")),
                                        XEasyPdfTemplateHandler.Table.Cell.build()
                                                .setWidth("150pt")
                                                .setBorder("1 solid black")
                                                .addComponent(XEasyPdfTemplateHandler.Text.build().setText("滕皋军"))),

                                XEasyPdfTemplateHandler.Table.Row.build().addCell(
                                        XEasyPdfTemplateHandler.Table.Cell.build()
                                                .setWidth("150pt")
                                                .setHorizontalStyle("end")
                                                .setBorder("1 solid black")
                                                .addComponent(XEasyPdfTemplateHandler.Text.build().setText("受试者代码")),
                                        XEasyPdfTemplateHandler.Table.Cell.build()
                                                .setWidth("150pt")
                                                .setBorder("1 solid black")
                                                .addComponent(XEasyPdfTemplateHandler.Text.build().setText("subjectCode"))
                                )
                        )));

        // 创建当前页码
        XEasyPdfTemplateCurrentPageNumber currentPageNumber = XEasyPdfTemplateHandler.CurrentPageNumber.build();
        // 创建总页码
        XEasyPdfTemplateTotalPageNumber totalPageNumber = XEasyPdfTemplateHandler.TotalPageNumber.build().setPageId("pageId9");

        // 创建容器
        XEasyPdfTemplateBlockContainer container = XEasyPdfTemplateHandler.BlockContainer.build();
        // 添加容器内组件
        container.addComponent(XEasyPdfTemplateHandler.Text.build().setText("-第"), currentPageNumber,
                XEasyPdfTemplateHandler.Text.build().setText("页/共"), totalPageNumber,
                XEasyPdfTemplateHandler.Text.build().setText("页-"));

        document.addPage(cover);

        for (int i = 0; i < 10; i++) {

            // 创建页面
            XEasyPdfTemplatePage page = XEasyPdfTemplateHandler.Page.build()
                    .setId(i == 9 ? "pageId9" : String.valueOf(i));

            // 页眉
            XEasyPdfTemplateTable header = XEasyPdfTemplateHandler.Table.build()
                    .setFontFamily("宋体")
                    .setFontSize("10pt").setBody(
                            XEasyPdfTemplateHandler.Table.Body.build().addRow(
                                    XEasyPdfTemplateHandler.Table.Row.build().addCell(
                                            // 研究代码
                                            XEasyPdfTemplateHandler.Table.Cell.build().addComponent(
                                                    XEasyPdfTemplateHandler.Text.build().setText("MA-HCC-II-005")),
                                            // 方案版本号
                                            XEasyPdfTemplateHandler.Table.Cell.build().addComponent(
                                                    XEasyPdfTemplateHandler.Text.build().setText("V3.0")))));
            page.addHeaderComponent(header);

            // 页脚
            XEasyPdfTemplateTable footer = XEasyPdfTemplateHandler.Table.build()
                    .setFontFamily("宋体")
                    .setFontSize("10pt").setBody(
                            XEasyPdfTemplateHandler.Table.Body.build().addRow(
                                    XEasyPdfTemplateHandler.Table.Row.build().addCell(
                                            // eCRF版本号
                                            XEasyPdfTemplateHandler.Table.Cell.build().addComponent(
                                                    XEasyPdfTemplateHandler.Text.build().setText("eCRF版本号")),
                                            // 页码
                                            XEasyPdfTemplateHandler.Table.Cell.build().addComponent(
                                                    container.setHorizontalStyle("center")),
                                            // eCRF版本日期
                                            XEasyPdfTemplateHandler.Table.Cell.build().addComponent(
                                                    XEasyPdfTemplateHandler.Text.build().setText("eCRF版本日期").setHorizontalStyle("end")))));
            page.addFooterComponent(footer).setHeaderHeight("10");
            XEasyPdfTemplateText tableText = XEasyPdfTemplateHandler.Text.build()
                    // 设置id
                    //.setId("tableText")
                    // 设置文本
                    .setText("贵阳市行政区划").setFontFamily("宋体")
                    // 设置字体大小
                    .setFontSize("20pt")
                    // 设置当前位置分页
                    .setBreakBefore("page")
                    // 设置段前空白
                    .setSpaceBefore("20pt")
                    // 设置水平居右
                    .setHorizontalStyle("center");
            page.addBodyComponent(tableText);

            XEasyPdfTemplateTable table = XEasyPdfTemplateHandler.Table.build()
                    .setFontFamily("宋体")
                    .setBackgroundColor(DARKSEAGREEN.toString())
                    .setBorder("1 solid black");
            // 设置表格体
            XEasyPdfTemplateTableBody body = XEasyPdfTemplateHandler.Table.Body.build().addRow(
                    XEasyPdfTemplateHandler.Table.Row.build().addCell(
                            XEasyPdfTemplateHandler.Table.Cell.build().addComponent(
                                            XEasyPdfTemplateHandler.BlockContainer.build().addComponent(
                                                            XEasyPdfTemplateHandler.Text.build().setText("*")
                                                                    .setVerticalStyle("top")
                                                                    .setFontFamily("plain")
                                                                    .setFontColor("red"),
                                                            XEasyPdfTemplateHandler.Text.build().setText("受试者信息")
                                                    )
                                                    .setMarginTop("4pt"))
                                    .setWidth("180").setHeight("29"),
                            XEasyPdfTemplateHandler.Table.Cell.build().addComponent(
                                    XEasyPdfTemplateHandler.BlockContainer.build().addComponent(
                                            XEasyPdfTemplateHandler.Text.build().setText(getString(null))
                                    )
                            ).setWidth("180").setHeight("29")
                    )
            );
            body.addRow(
                    XEasyPdfTemplateHandler.Table.Row.build().addCell(
                            XEasyPdfTemplateHandler.Table.Cell.build().addComponent(
                                    XEasyPdfTemplateHandler.BlockContainer.build().addComponent(
                                                    XEasyPdfTemplateHandler.Text.build().setText(" ")
                                                            .setVerticalStyle("top")
                                                            .setFontColor("red"),
                                                    XEasyPdfTemplateHandler.Text.build().setText("受试者信息"))
                                            .setMarginTop("4pt")).setWidth("445").setHeight("29")
                    )
            );

//            table.setBody();
//            page.addBodyComponent(title);

            // 添加正文
//            XEasyPdfTemplateTable content = XEasyPdfTemplateHandler.Table.build().setVerticalStyle("center")
//                    .setFontFamily("宋体")
//                    .setFontSize("10pt");
//            XEasyPdfTemplateTableBody body = XEasyPdfTemplateHandler.Table.Body.build();
            for (int j = 0; j < 2; j++) {
                XEasyPdfTemplateTableRow row = XEasyPdfTemplateHandler.Table.Row.build().setBorder("1 solid black").addCell(
                        XEasyPdfTemplateHandler.Table.Cell.build().setWidth("120").setHeight("29").setBorderLeft("4pt").addComponent(
                                XEasyPdfTemplateHandler.Text.build().setText("研究代码")),
                        XEasyPdfTemplateHandler.Table.Cell.build().setWidth("120").setHeight("29").setBorderLeft("4pt").addComponent(
                                XEasyPdfTemplateHandler.Text.build().setText("MA-HCC-II-005")),
                        XEasyPdfTemplateHandler.Table.Cell.build().setWidth("120pt").setHeight("29pt").addComponent(
                                XEasyPdfTemplateHandler.Image.build()
                                        .setPath("https://medical.cdn.jianfancloud.com/edc/subject/visit/20231102_15_48_015门诊病历20231011.jpg")
                                        .setHorizontalStyle("center").setHeight("29pt").setWidth("100pt"))
                        );
                body.addRow(row);
            }
            table.setBody(body);
            page.addBodyComponent(table);
            page.addBodyComponent(XEasyPdfTemplateHandler.Image.build()
                    .setPath("https://medical.cdn.jianfancloud.com/edc/subject/visit/20231102_15_48_015门诊病历20231011.jpg")
                    .setHorizontalStyle("center"));

            page.setBodyMarginTop("14");
            page.setMarginTop("28").setMarginBottom("20").setMarginLeft("75").setMarginRight("75");


            // 添加文本
//        page.addBodyComponent(title1, title2, text);
            // 添加页面
//            document.addPage(cover);
            document.addPage(page);
        }


        // 创建书签
        XEasyPdfTemplateBookmark bookmark1 = XEasyPdfTemplateHandler.Bookmark.build()
                // 设置标题
                .setTitle("封面")
                // 设置内部地址（对应组件id）
                .setInternalDestination("1");
        document.addBookmark(bookmark1);
        for (int j = 1; j <=10; j++) {
            XEasyPdfTemplateBookmark bookmark = XEasyPdfTemplateHandler.Bookmark.build()
                    // 设置标题
                    .setTitle("页面" + (j++))
                    // 设置内部地址（对应组件id）
                    .setInternalDestination(String.valueOf(j++));
            document.addBookmark(bookmark);


        }


        // 转换pdf
        document.transform(outputPath);
    }

    public static String getString(String form) {
        if (!NumberUtil.isNumber(form)) {
            return "________________";
        }
        StringBuilder result = new StringBuilder();
        String[] nums = form.split("\\.");
        for (int i = 0; i < Integer.parseInt(nums[0]); i++) {
            result.append("|_");
        }
        if ("0".equals(nums[1])) {
            result.append("|");
            return result.toString();
        } else {
            result.append("|.");
        }
        for (int i = 0; i < Integer.parseInt(nums[1]); i++) {
            result.append("|_");
        }
        return result.append("|").toString();
    }
}
